/**
 * Created by c.y on 2018-1-11
 * 文件说明: 获取后台api数据,渲染列表
 * null字段值说明，当用户没有什么输入的话，即空字符串的话，后台要求传递null
 * 所有B端接口传递给后台的数据格式，均为JSON字符串，除了图片上传以表单的形式。
 */

import systemApi from './api';
import codeManger from './statusCodeManage';
import filter from '../tool/filter';

export default {
    /**
     * 查询产品的列表
     * @param {object} context  执行上下文（即this对象，必传）
     * @param {string| null} prodName 产品名称（默认为null, 可选）
     * @param {string| null} runStatus 产品运行状态（即上下架，默认null，可选）
     * @param {string | null} prodId 产品编号（默认null, 可选）
     * @param {boolean} isFormat 是否格式化佣金（默认为false，可选）
     */
    fetchProductList: function (context, prodName = null, runStatus = null, prodId = null, isFormat = false) {
        let _this = context;
        // 如果产品名称的为空的话，那么传递null,其他情况传递其值
        if (typeof prodName === 'string' && !prodName.trim()) {
            prodName = null;
        }
        // 如果产品名称的为空的话，那么传递null,其他情况传递其值
        if (typeof prodId === 'string' && !prodId.trim()) {
            prodName = null;
        }
        // 如果没有选择状态的话，那么为空的，传递null
        if (typeof runStatus === 'string' && runStatus === '') {
            runStatus = null;
        } else if (typeof runStatus === 'string' && runStatus !== '') {
            runStatus = parseInt(runStatus);
        }
        let searchSubmit = {
            prodName: prodName,
            runStatus: runStatus,
            prodId: prodId,
            page: _this.currentPage, // 当前页
            rows: _this.pageLimitNum // 每页显示的条数
        };
        systemApi.fetchProductList(searchSubmit).then(function (res) {
            if (res.errorCode === 0) {
                if (isFormat) {
                    _this.data = _this.formatList(res.body.items, 'commissionRate');
                    // 缓存佣金列表，当用户输入佣金格式不对，以及网络出现错误是，获取该佣金的初始值。
                    _this.commissionRateList = _this.getCommissionRateList(_this.data, 'commissionRate');
                } else {
                    _this.data = res.body.items;
                }
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 新增下级渠道第二步的产品查询（需要筛选字段，只查询已上架的产品）
     * 列表后面的佣金列表与分配列表，这两列是默认设置的，不是后台显示的，
     * 所以需要在返回的数据后面追加两个字段（因为要依靠这个表格列的字段值）
     * @param {object} context  执行上下文（即this对象，必传）
     * @param {string| null} prodName 产品名称（默认为null, 可选）
     * @param {string | null} prodId 产品编号（默认null, 可选）
     * @param {Array} assignInfo 分配给渠道的产品的佣金信息列表(需要缓存)
     */
    fetchChannelProList: function (context, prodName = null, prodId = null, assignInfo = []) {
        let _this = context;
        // 如果产品名称的为空的话，那么传递null,其他情况传递其值
        if (typeof prodName === 'string' && !prodName.trim()) {
            prodName = null;
        }
        // 如果产品名称的为空的话，那么传递null,其他情况传递其值
        if (typeof prodId === 'string' && !prodId.trim()) {
            prodName = null;
        }
        let searchSubmit = {
            prodName: prodName,
            runStatus: 1, // 只筛选已上架的产品
            prodId: prodId,
            page: _this.currentPage, // 当前页
            rows: _this.pageLimitNum // 每页显示的条数
        };
        systemApi.fetchProductList(searchSubmit).then(function (res) {
            if (res.errorCode === 0) {
                // 点击分页与切换页码的，需要清空data数据为空，因为后面的新增的两个字段是push
                // 如果不清空的话，那么久一直push。数据越来越多。
                _this.data = [];
                if (res.body.items.length >= 1) {
                    if (assignInfo.length === 0) {
                        // 增加两列默认字段
                        res.body.items.forEach(function (item) {
                            item.setRate = '0.0000';
                            item.isDistribute = false;
                            _this.data.push(item);
                        });
                    } else {
                        res.body.items.forEach(function (item) {
                            let assignItemInfo = filter.getAssignItem(item.prodId, assignInfo);
                            // 没有找到的话，那么赋值为默认值
                            if (!assignItemInfo) {
                                item.setRate = '0.0000';
                                item.isDistribute = false;
                            } else {
                                item.setRate = assignItemInfo.setRate;
                                item.isDistribute = assignItemInfo.isDistribute;
                            }
                            _this.data.push(item);
                        });
                    }
                }
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 分配产品下级渠道列表
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {string| null} chanNo 渠道编号 (默认为null, 可选）
     * @param {string| null} merName 渠道名称 (默认为null, 可选）
     */
    fetchDistToChanList: function (context, chanNo = null, merName = null) {
        let _this = context;
        // 如果渠道编号为空的话，那么传递null,其他情况传递其值
        if (typeof chanNo === 'string' && !chanNo.trim()) {
            chanNo = null;
        }
        // 如果渠道名称为空的话，那么传递null,其他情况传递其值
        if (typeof merName === 'string' && !merName.trim()) {
            merName = null;
        }
        let submitInfo = {
            prodId: _this.$route.query.prodId,
            chanNo: chanNo,
            merName: merName,
            page: _this.currentPage, // 当前页
            rows: _this.pageLimitNum // 每页显示的条数
        };
        systemApi.fetchDistToChanList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.data = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 设置佣金比例下级渠道列表（根上一个接口参数相同，但返回的结果不同）
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {string| null} chanNo 渠道编号 (默认为null, 可选）
     * @param {string| null} merName 渠道名称 (默认为null, 可选）
     */
    fetchSetRateChanList (context, chanNo = null, merName = null) {
        let _this = context;
        // 如果渠道编号为空的话，那么传递null,其他情况传递其值
        if (typeof chanNo === 'string' && !chanNo.trim()) {
            chanNo = null;
        }
        // 如果渠道名称为空的话，那么传递null,其他情况传递其值
        if (typeof merName === 'string' && !merName.trim()) {
            merName = null;
        }
        let submitInfo = {
            prodId: _this.$route.query.prodId,
            chanNo: chanNo,
            merName: merName,
            page: _this.currentPage, // 当前页
            rows: _this.pageLimitNum // 每页显示的条数
        };
        systemApi.fetchDistToChanList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                // 佣金数字的格式化
                _this.data = _this.formatList(res.body.items, 'commissionRate');
                _this.commissionRateList = _this.getCommissionRateList(res.body.items, 'commissionRate');
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 分配产品给部门列表
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {string| null} deptName 部门名称 (默认为null, 可选）
     */
    fetchDistToDeptlList (context, deptName = null) {
        let _this = context;
        // 如果产品名称的为空的话，那么传递null,其他情况传递其值
        if (typeof deptName === 'string' && !deptName.trim()) {
            deptName = null;
        }
        let submitInfo = {
            prodId: _this.$route.query.prodId,
            deptName: deptName,
            page: _this.currentPage,
            rows: _this.pageLimitNum
        };
        systemApi.fetchDistToDeptlList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.data = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 业务员列表
     * @param context -> this
     * @param deptName -> str
     */
    fetchSalesmanlListPack (context, deptName = null) {
        let _this = context;
        // 如果产品名称的为空的话，那么传递null,其他情况传递其值
        if (typeof deptName === 'string' && !deptName.trim()) {
            deptName = null;
        }
        let submitInfo = {
            mblNo: _this.formItem.organPhone,
            name: _this.formItem.organName,
            parentMblNo: _this.formItem.superiorPhone,
            parentName: _this.formItem.superiorName,
            page: _this.currentPage,
            rows: _this.pageLimitNum
        };
        systemApi.fetchSalesmanlList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.data = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
                if (_this.loading) {
                    _this.loading = false;
                }
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
                if (_this.loading) {
                    _this.loading = false;
                }
            }
        });
    },
    /**
     *  用户组列表接口
     * @param data
     * @returns {*}
     */
    fetchUserGroupListPost (context, deptName = null) {
        let _this = context;
        _this.loading = true;
        let submitInfo = {
            page: _this.currentPage,
            rows: _this.pageLimitNum
        };
        systemApi.fetchUserGroupList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.data = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
                if (_this.loading) {
                    _this.loading = false;
                }
            }
        }, function (error) {
            if (_this.loading) {
                _this.loading = false;
            }
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     *  订单列表（包含订单列表与订单审批列表）
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {string| null} empName 业务员名字 (默认为null, 可选）
     * @param {string| null} empMblNo 业务员吗电话号码 (默认为null, 可选）
     * @param {string| null} orderStatus 订单状态 (默认为null, 可选）
     */
    fetchOrderList (context, empName = null, empMblNo = null, orderStatus = null) {
        let _this = context;
        _this.loading = true;
        let submitInfo = {
            page: _this.currentPage,
            rows: _this.pageLimitNum,
            chanName: _this.formItem.channelName,
            prodName: _this.formItem.prodName,
            startDay: _this.formItem.startDay,
            endDay: _this.formItem.endDay,
            userName: _this.formItem.applName,
            userMblNo: _this.formItem.applPhone,
            empName: empName,
            empMblNo: empMblNo,
            orderStatus: orderStatus
        };
        systemApi.fetchOrderList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.data = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
                if (_this.loading) {
                    _this.loading = false;
                }
            }
        }, function (error) {
            if (_this.loading) {
                _this.loading = false;
            }
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 渠道管理下级渠道列表
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {string| null} chanNo 渠道编号 (默认为null, 可选）
     * @param {string| null} merName 渠道名称 (默认为null, 可选）
     * @param {string| null} contactName 联系人姓名 (默认为null, 可选）
     * @param {string| null} contactPhone 联系人电话 (默认为null, 可选）
     */
    fetchLowerChannelList: function (context, chanNo = null, merName = null, contactName = null, contactPhone = null) {
        let _this = context;
        // 如果渠道编号为空的话，那么传递null,其他情况传递其值
        if (typeof chanNo === 'string' && !chanNo.trim()) {
            chanNo = null;
        }
        // 如果渠道名称为空的话，那么传递null,其他情况传递其值
        if (typeof merName === 'string' && !merName.trim()) {
            merName = null;
        }
        // 如果渠道名称为空的话，那么传递null,其他情况传递其值
        if (typeof contactName === 'string' && !contactName.trim()) {
            contactName = null;
        }
        // 如果渠道名称为空的话，那么传递null,其他情况传递其值
        if (typeof contactPhone === 'string' && !contactPhone.trim()) {
            contactPhone = null;
        }
        let submitInfo = {
            prodId: _this.$route.query.prodId,
            chanNo: chanNo,
            merName: merName,
            contactName: contactName,
            contactMblNo: contactPhone,
            page: _this.currentPage, // 当前页
            rows: _this.pageLimitNum // 每页显示的条数
        };
        systemApi.fetchLowerChannelList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.data = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 注册查询列表
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {Number| 1} currentPage 当前页 (默认为1)
     * @param {Number| 20} pageLimitNum 每页显示条数 (默认为20）
     */
    fetchListPage: function (context, currentPage, pageLimitNum) {
        let _this = context;
        let submitInfo = {
            page: currentPage, // 当前页
            rows: pageLimitNum // 每页显示的条数
        };
        systemApi.regList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.lists = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
                _this.currentPage = res.body.page;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    },
    /**
     * 点击查询列表
     * @param {object} context 执行上下文（即this对象，必传）
     * @param {Number| 1} currentPage 当前页 (默认为1)
     * @param {Number| 20} pageLimitNum 每页显示条数 (默认为20）
     */
    fetchClickList: function (context, currentPage = 1, pageLimitNum = 20) {
        let _this = context;
        let submitInfo = {
            page: currentPage, // 当前页
            rows: pageLimitNum // 每页显示的条数
        };
        systemApi.clickList(submitInfo).then(function (res) {
            if (res.errorCode === 0) {
                _this.lists = res.body.items;
                _this.totalNumber = res.body.total;
                _this.pageLimitNum = res.body.rows;
                _this.currentPage = res.body.page;
            }
        }, function (error) {
            if (error.response) {
                codeManger.showTipOfStatuCode(error, _this);
            }
        });
    }
};
